<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Framework</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Framework"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Framework rootpage-Framework skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Framework</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Ein <span lang="en"><b>Framework</b></span> (<a href="Englische_Sprache" title="Englische Sprache">englisch</a> für <i>Rahmenstruktur</i>) ist ein Programmiergerüst, das in der <a href="Softwaretechnik" title="Softwaretechnik">Softwaretechnik</a> eingesetzt wird – insbesondere in der <a href="Objektorientierte_Programmierung" title="Objektorientierte Programmierung">objektorientierten</a> <a href="Softwareentwicklung" class="mw-redirect" title="Softwareentwicklung">Softwareentwicklung</a> sowie in <a href="Komponentenmodell" title="Komponentenmodell">komponentenbasierten</a> Ansätzen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beschreibung">Beschreibung</h2></div>
<p>Ein <span lang="en">Framework</span> ist kein eigenständiges Programm, sondern stellt eine Struktur bereit, innerhalb derer Entwickler Anwendungen erstellen. Durch die im <span lang="en">Framework</span> verwendeten <a href="Entwurfsmuster" title="Entwurfsmuster">Entwurfsmuster</a> beeinflusst es typischerweise auch die <a href="Softwarearchitektur" title="Softwarearchitektur">Architektur</a> der entstehenden Software. So unterstützen etwa die <a href="Microsoft_Foundation_Classes" title="Microsoft Foundation Classes">Microsoft Foundation Classes</a> das <a href="Model_View_Controller" title="Model View Controller"><span lang="en">Model-View-Controller</span></a>-Muster.
</p><p>Ralph E. Johnson und Brian Foote beschrieben ein Framework 1988 im Artikel <i>Designing Reusable Classes</i> im <i>Journal of Object-Oriented Programming</i> als:
</p>
<div class="Vorlage_Zitat" style="margin:1em 40px;">
<div style="margin:1em 0;"><blockquote style="margin:0;">
<p>„Ein Framework ist eine semi-vollständige Applikation. Es stellt für Applikationen eine wiederverwendbare, gemeinsame Struktur zur Verfügung. Die Entwickler bauen das Framework in ihre eigene Applikation ein und erweitern es derart, dass es ihren spezifischen Anforderungen entspricht. Frameworks unterscheiden sich von Toolkits dahingehend, dass sie eine kohärente Struktur zur Verfügung stellen, anstatt einer einfachen Menge von Hilfsklassen.“<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
</blockquote>
</div></div>
<p>Frameworks geben in der Regel die grundlegende Anwendungsarchitektur vor. Charakteristisch ist dabei die <i>(<span lang="en"><a href="Inversion_of_Control" title="Inversion of Control">Inversion of Control</a></span>)</i> (Umkehrung der Steuerung): Programmierer registrieren konkrete <a href="Implementierung" title="Implementierung">Implementierungen</a>, die anschließend vom <span lang="en">Framework</span> aufgerufen und verwaltet werden. Wird diese Registrierung nicht im Quellcode festgelegt, sondern extern konfiguriert, spricht man von <i><span lang="en"><a href="Dependency_Injection" title="Dependency Injection">Dependency Injection</a></span></i>.
</p><p>Ein <span lang="en">Framework</span> definiert insbesondere den <a href="Kontrollfluss" title="Kontrollfluss">Kontrollfluss</a> einer Anwendung sowie die <a href="Schnittstelle" title="Schnittstelle">Schnittstellen</a>, die konkrete Klassen implementieren müssen. Es dient damit der Wiederverwendung bewährter architektonischer Muster. Da solche Muster stets auf eine bestimmte <a href="Problemdom%C3%A4ne" title="Problemdomäne">Problemdomäne</a> zugeschnitten sind, sind <span lang="en">Frameworks</span> meist domänenspezifisch oder auf bestimmte Anwendungstypen beschränkt – etwa grafische Editoren, Buchhaltungssysteme oder <a href="Webshop" class="mw-redirect" title="Webshop">Webshops</a>.
</p><p>Eine allgemeingültige Definition existiert nicht, da Frameworks sehr unterschiedlich ausgeprägt sein können. Der Begriff wird daher häufig unscharf verwendet; mitunter werden bereits umfangreiche <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klassensammlungen</a> als Framework bezeichnet.
</p>
<div class="mw-heading mw-heading2"><h2 id="White-Box-_und_Black-Box-Frameworks"><span lang="en">White-Box</span>- und <span lang="en">Black-Box-Frameworks</span></h2></div>
<p>Die Unterscheidung zwischen <span lang="en">White-Box</span>- und <span lang="en">Black-Box</span>-Frameworks bezieht sich auf die Sichtbarkeit und Zugänglichkeit der Implementierung hinter einer Schnittstelle.
</p>
<ul><li>Bei einer <span lang="en">Black-Box</span>-Abstraktion kennen Klienten nur die Spezifikation der Schnittstelle, nicht jedoch deren interne Umsetzung.</li>
<li>Bei einer <span lang="en">White-Box</span>-Abstraktion ist die Implementierung einsehbar und kann durch Vererbung erweitert werden, auch wenn die Schnittstelle weiterhin eine gewisse Kapselung erzwingt.</li></ul>
<p>Einige Autoren unterscheiden zusätzlich zwischen <span lang="en">White-Boxes</span> (Erweiterung möglich) und <span lang="en">Glass-Boxes</span> (nur Einsicht möglich).<sup id="cite_ref-Component_Software_2-0" class="reference"><a href="#cite_note-Component_Software-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Framework-Typen"><span lang="en">Framework</span>-Typen</h2></div>
<p><span lang="en">Frameworks</span> lassen sich – ohne strikte Abgrenzung – in folgende Kategorien einteilen:
</p>
<dl><dt><span lang="en">Application Frameworks</span></dt>
<dd>bilden das Programmiergerüst für eine bestimmte Klasse von Anwendungen <i>(<span lang="en">horizontal slice</span>)</i>, die grundlegende <a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> und Programmstrukturen bereitstellen.</dd></dl>
<dl><dt><span lang="en">Domain Frameworks</span></dt>
<dd>bilden das Programmiergerüst für einen spezifischen Problembereich <i>(<span lang="en">vertical slice</span>)</i>, das typische Funktionen und Strukturen dieser Domäne bündelt.</dd></dl>
<dl><dt><span lang="en">Class Frameworks</span></dt>
<dd>fassen Klassen und Methoden zusammen, die Unterstützung auf einer bestimmten Abstraktionsebene für ein breites Anwendungsspektrum bieten.</dd></dl>
<dl><dt>Komponenten-<span lang="en">Frameworks</span></dt>
<dd>abstrahieren von der objektorientierten Ebene und stellen eine Umgebung zur Entwicklung und Integration von Software-Komponenten bereit. Software-Komponenten werden dabei meist als Bündel von Klassen mit eindeutig definierten Schnittstellen betrachtet.</dd></dl>
<dl><dt><span lang="en">Coordination Frameworks</span></dt>
<dd>(wie <a href="Jini" title="Jini">Jini</a> und <a href="Universal_Plug_and_Play" title="Universal Plug and Play">UPnP</a>) ermöglichen die Interaktionen zwischen Geräten und unterstützen deren Interoperabilität. Wenn beispielsweise ein „Jini-fähiger“ Drucker an ein Netzwerk angeschlossen wird, welches Jini verwendet, so kann er selbständig anderen Geräten mitteilen, was für eine Art von Drucker dazugekommen ist.</dd></dl>
<dl><dt><span lang="en">Test Frameworks</span></dt>
<dd>dienen zur Ausführung automatisierter <a href="Softwaretest" title="Softwaretest">Softwaretests</a>, etwa <a href="JUnit" title="JUnit">JUnit</a> für <a href="Unit_test" class="mw-redirect" title="Unit test">Modultests</a> oder <a href="Selenium" title="Selenium">Selenium</a> für <a href="Webanwendung" title="Webanwendung">Webanwendungen</a>.</dd></dl>
<dl><dt><a href="Webframework" title="Webframework">Webframeworks</a></dt>
<dd>sind ausgelegt für die Entwicklung dynamischer Websites, Webanwendungen oder Webservices.</dd></dl>
<div class="mw-heading mw-heading2"><h2 id="Bekannte_Frameworks">Bekannte Frameworks</h2></div>
<p>Aufgrund der uneinheitlichen Begriffsverwendung ist die Zuordnung einzelner Systeme nicht immer eindeutig. Beispiele sind:
</p>
<ul><li><a href=".Net-Framework" title=".Net-Framework">.Net-Framework</a> von Microsoft</li>
<li><a href="1C%3AEnterprise" title="1C:Enterprise">1C:Enterprise</a></li>
<li><a href="ADAPTIVE_Communication_Environment" title="ADAPTIVE Communication Environment">ACE</a></li>
<li><a href="BMC_Remedy_Action_Request_System" title="BMC Remedy Action Request System">Action Request System</a> (ARS) – Application Framework von BMC Remedy</li>
<li><a href="Adobe_Flex" class="mw-redirect" title="Adobe Flex">Adobe Flex</a></li>
<li><a href="Angular" title="Angular">Angular</a></li>
<li><a href="AngularJS" title="AngularJS">AngularJS</a></li>
<li><a href="Apache_Spark" title="Apache Spark">Apache Spark</a></li>
<li><a href="Bootstrap_(Framework)" title="Bootstrap (Framework)">Bootstrap</a> Framework von Twitter</li>
<li><a href="Cocoa_(API)" title="Cocoa (API)">Cocoa</a></li>
<li><a href="CakePHP" title="CakePHP">CakePHP</a></li>
<li><a href="Django_(Framework)" title="Django (Framework)">Django (Framework)</a></li>
<li><a href="Drupal" title="Drupal">Drupal</a></li>
<li><a href="Eclipse_RCP" title="Eclipse RCP">Eclipse Rich Client Platform</a></li>
<li><a href="TYPO3_Flow" class="mw-redirect" title="TYPO3 Flow">TYPO3 Flow</a></li>
<li><a href="Grails" title="Grails">Grails</a></li>
<li><a href="Horde_(Framework)" title="Horde (Framework)">Horde (Framework)</a></li>
<li><a href="JavaServer_Faces" class="mw-redirect" title="JavaServer Faces">JavaServer Faces</a></li>
<li><a href="JBoss_Seam" title="JBoss Seam">JBoss Seam</a></li>
<li><a href="JHotDraw" title="JHotDraw">JHotDraw</a></li>
<li><a href="JUnit" title="JUnit">JUnit</a></li>
<li><a href="Laravel" title="Laravel">Laravel</a></li>
<li><a href="NetBeans_IDE" title="NetBeans IDE">OpenIDE RCP</a></li>
<li><a href="Microsoft_Foundation_Classes" title="Microsoft Foundation Classes">Microsoft Foundation Classes</a></li>
<li><a href="Qt_(Bibliothek)" title="Qt (Bibliothek)">Qt</a></li>
<li><a href="Robot_Framework" title="Robot Framework">Robot Framework</a></li>
<li><a href="Robot_Operating_System" title="Robot Operating System">Robot Operating System</a></li>
<li><a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a></li>
<li><a href="Selenium" title="Selenium">Selenium</a></li>
<li><a href="Spring_(Framework)" title="Spring (Framework)">Spring (Framework)</a></li>
<li><a href="Struts" title="Struts">Struts</a></li>
<li><a href="Symfony" title="Symfony">Symfony</a></li>
<li><a href="Visual_Component_Library" title="Visual Component Library">Visual Component Library</a> (VCL) – Komponentenbibliothek von Borland</li>
<li><a href="WoltLab_Community_Framework" title="WoltLab Community Framework">WoltLab Community Framework</a> (WCF) – PHP-Framework</li>
<li><a href="YAML_(Framework)" title="YAML (Framework)">YAML (Framework)</a> CSS-Framework</li>
<li><a href="Yii" title="Yii">Yii</a></li>
<li><a href="Zend_Framework" title="Zend Framework">Zend Framework</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>Wolfgang Pree: <cite style="font-style:italic">Komponentenbasierte Softwareentwicklung mit Frameworks</cite>. dpunkt, 1997, ISBN 3-920993-68-3.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Framework&rft.au=Wolfgang+Pree&rft.btitle=Komponentenbasierte+Softwareentwicklung+mit+Frameworks&rft.date=1997&rft.genre=book&rft.isbn=3920993683&rft.pub=dpunkt" style="display:none"> </span></li>
<li>Krzysztof Cwalina, Brad Abrams: <cite style="font-style:italic">Richtlinien für das Framework-Design – Konventionen, Ausdrücke und Muster für wiederverwendbare .NET-Bibliotheken</cite>. Addison-Wesley, 2007, ISBN 3-8273-2626-5.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Framework&rft.au=Krzysztof+Cwalina%2C+Brad+Abrams&rft.btitle=Richtlinien+f%C3%BCr+das+Framework-Design+-+Konventionen%2C+Ausdr%C3%BCcke+und+Muster+f%C3%BCr+wiederverwendbare+.NET-Bibliotheken&rft.date=2007&rft.genre=book&rft.isbn=3827326265&rft.pub=Addison-Wesley" style="display:none"> </span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">Ralph E. Johnson, Brian Foote: “Designing Reusable Classes” im "Journal of Object-Oriented Programming" (1988); "A framework is a semi-complete application. A framework provides a reusable, common structure to share among applications. Developers incorporate the framework into their own application and extend it to meet their specific needs. Frameworks differ from toolkits by providing a coherent structure, rather than a simple set of utility classes."; Quelle: Petar Tahchiev, Felipe Leme, Vincent Massol: JUnit in Action, 2. Auflage, broschiert, Manning Publications, 2010, ISBN 1935182021, Seite 4</span>
</li>
<li id="cite_note-Component_Software-2"><span class="mw-cite-backlink"><a href="#cite_ref-Component_Software_2-0">↑</a></span> <span class="reference-text">Clemens Szyperski, Dominik Gruntz, Stephan Murer: <cite style="font-style:italic"><span lang="en">Component Software. Beyond object-oriented programming</span></cite>. 2. Auflage. Addison-Wesley, London; München 2002, ISBN 0-201-74572-0, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>40<span style="display:inline-block;width:.2em"> </span>f</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Framework&rft.au=Clemens+Szyperski%2C+Dominik+Gruntz%2C+Stephan+Murer&rft.btitle=Component+Software.+Beyond+object-oriented+programming&rft.date=2002&rft.edition=2.&rft.genre=book&rft.isbn=0201745720&rft.pages=40f&rft.place=London%3B+M%C3%BCnchen&rft.pub=Addison-Wesley" style="display:none"> </span></span>
</li>
</ol>
<div class="hintergrundfarbe1 rahmenfarbe1 navigation-not-searchable normdaten-typ-s" style="border-style: solid; border-width: 1px; clear: left; margin-bottom:1em; margin-top:1em; padding: 0.25em; overflow: hidden; word-break: break-word; word-wrap: break-word;" id="normdaten">
<div style="display: table-cell; vertical-align: middle; width: 100%;">
<div>
Normdaten (Sachbegriff): <a href="Gemeinsame_Normdatei" title="Gemeinsame Normdatei">GND</a>: <span class="-print"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4464685-9">4464685-9</a></span> </div>
</div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2026-01-11" href="https://de.wikipedia.org/wiki/?title=Framework&oldid=263227783">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>